#ifndef SCELCONVERTER_H
#define SCELCONVERTER_H

#include <String.h>
#include <File.h>
#include <vector>
#include <map>

class ScelConverter {
public:
    struct DictInfo {
        BString name;        // 词库名
        BString type;        // 词库类型
        BString description; // 描述信息
        BString example;     // 词库示例
    };

    struct WordEntry {
        uint16 frequency;    // 词频
        BString pinyin;      // 拼音
        BString word;        // 中文词组
    };

    ScelConverter();
    ~ScelConverter();

    // 解析搜狗词库文件
    bool ParseScelFile(const char* filename, DictInfo& info);

    // 获取解析后的词条
    const std::vector<WordEntry>& GetEntries() const { return fEntries; }

    // 保存为文本格式
    bool SaveToText(const char* filename) const;

    // 保存为CIN格式
    bool SaveToCin(const char* filename) const;

private:
    // 解析拼音表
    bool _ParsePinyinTable(BFile& file, off_t offset, size_t size);

    // 解析中文词组表
    bool _ParseWordTable(BFile& file, off_t offset);

    // 读取UTF-16字符串
    BString _ReadUTF16String(BFile& file, size_t length);

    // 写入CIN文件头部
    void _WriteCinHeader(BFile& file) const;

private:
    std::map<uint16, BString> fPinyinTable;  // 拼音索引表
    std::vector<WordEntry> fEntries;         // 词条列表
};

#endif // SCELCONVERTER_H